package com.toKnow.service;

import com.toKnow.model.dto.UserRegisterDTO;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public interface RegisterService {
    /**
     * 检查注册时的用户名
     * 用户名：是否重复，6-18，只有英文数字下划线
     * 符合规范返回""，否则返回提示信息
     */
    String checkUsername(String username);

    /**
     * 检查注册时的密码
     * 密码：至少包含数字字母和特殊字符
     * 符合规范返回""，否则返回提示信息
     */
    String checkUserpwd(String userpwd);

    /**
     * 检查注册时的邮箱
     * 邮箱：是否重复，符合规范
     * 符合规范返回""，否则返回提示信息
     */
    String checkEmail(String email);

    /**
     * 注册时生成验证码
     */
    void generateCode(HttpServletRequest request, HttpServletResponse response) throws IOException;

    /**
     * 将注册用户插入数据库表中
     * 如果username和email都不存在，则插入
     * 如果username或email在已激活用户中则插入失败
     * 如果username或email在未激活用户中，则修改username或email所在的关系
     * 数据库存储信息成功则成功发送激活邮件
     * 邮件成功则返回""，否则返回提示字符
     */
    String registerUser(HttpServletRequest request, UserRegisterDTO user);

    /**
     * 比对激活码，激活用户
     * 成功返回1，否则返回0
     */
    Integer activateUser(String username, String email, String activateCode);


    /*——————————工具方法——————————*/
    /**
     * 辅助注册的操作，检查username或email(唯一)是否存在于已激活的用户中
     * 返回值规则：已激活的最优先，其次按id排序取第一个。
     * 找不到，返回0
     * 未激活，返回负数id
     * 已激活，返回正数id
     */
    Integer isDuplicate(String fieldName, String fieldValue);
}
